iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Software Development

LeetCode-30 Days of JavaScript系列 第 13

LeetCode JS30-Day13 |2621. Sleep 睡眠函式

  • 分享至 

  • xImage
  •  

Day13 - 2621. Sleep 睡眠函式 EASY

Description❓

Given a positive integer millis, write an asynchronous function that sleeps for millis milliseconds. It can resolve any value.

給定正整數millis作為參數,宣告一個休眠millis毫秒的非同步函式,該函式可以解析任何值。

Points

Solution✍️

[ ▶️挑戰這一題 ][ 本日代碼 ]

1.宣告一個非同步的函式sleep並接受一個參數millis表示等待時間

2.函式內部以 await等待Promise處理結果,
當這個 Promise被解析,等待的操作完成,sleep函式會繼續執行。
(補充)使用 await 關鍵字等待 Promise 解析時,不需要明確使用 return 來返回 Promise 的解析值,因為 await 會自動將解析值設定為該 async 函式的返回值。

3.setTimeout(() => {resolve();}, millis);:
在這個匿名函式中,使用 setTimeout 函式來創建一個計時器,
計時器將在指定的 millis 毫秒後執行,當計時器到期時會調用 resolve() 函式,
這樣這個 Promise 就會被解析。

async function sleep(millis) {
    await new Promise(        
        (resolve)=>{ 
            setTimeout(() => resolve(),millis);
        }
    );
} 
  • 程式碼執行過程
    1.過了millis毫秒定時器過期,此時會調用匿名函式() => resolve()
    程式碼會變成這樣:
async function sleep(millis) {
    await new Promise(       
        (resolve)=> resolve()
    );
} 

2.此時resolve()會立即執行:解析Promise為完成,解析值為undefined

Testcase

const testSleep = async (millis) => {
 const startTime = Date.now();
 await sleep(millis); 
 const endTime = Date.now();
 const elapsedTime = endTime - startTime;
 console.log(elapsedTime); 
 };

 const millis1 = 100;
 const millis2 = 200;
 testSleep(millis1); //應該輸出接近100,但不一定等於100
 testSleep(millis2); //應該輸出接近200,但不一定等於200

上一篇
LeetCode JS30-Day12 | 2723. Add Two Promises 新增兩個Promise
下一篇
LeetCode JS30-Day14 | 2715. Timeout Cancellation 執行可取消的延遲函數
系列文
LeetCode-30 Days of JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言